package demo.io;

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

public class FileVisitorTest extends SimpleFileVisitor<Path> {
   
	/**
    preVisitDirectory - 一个路径被访问时调用
	PostVisitDirectory - 一个路径的所有节点被访问后调用。如果有错误发生，exception会传递给这个方法
	visitFile - 文件被访问时被调用。该文件的文件属性被传递给这个方法
	visitFileFailed - 当文件不能被访问时，此方法被调用。Exception被传递给这个方法。
	如果你比较懒，不想实现所有方法。你可以选择继承 SimpleFileVisitor。它帮你实现了上述方法，你只需Override 你感兴趣的方法。
     */
	
    private void find(Path path){
        System.out.printf("访问-%s:%s%n",(Files.isDirectory(path)?"目录":"文件"),path.getFileName());
    }
    
    @Override
    public FileVisitResult visitFile(Path file,BasicFileAttributes attrs){
        find(file);
        return FileVisitResult.CONTINUE;
    }
    
    @Override
    public FileVisitResult preVisitDirectory(Path dir,BasicFileAttributes attrs){
        find(dir);
        return FileVisitResult.CONTINUE;
    }
    
    @Override
    public FileVisitResult visitFileFailed(Path file,IOException e){
        System.out.println(e);
        return FileVisitResult.CONTINUE;
    }
    
    public static void main(String[] args) throws IOException{
//        if(args.length!=1){
//            System.out.println("请输入一个文件路径作为参数");
//            System.exit(-1);
//        }
        Files.walkFileTree(Paths.get("src/main/java"), new FileVisitorTest());
    }
}
